WS_EX_APPWINDOW a modalni okna

Otázka od: Lebeda David

29. 4. 2004 12:54

Ahoj,

ve sve aplikaci mam zobrazene nemodalni okno a chci, aby bylo pristupne z
taskbaru.
Neni problem, delam v OnCreate toto:

SetWindowLong(Self.Handle, GWL_EXSTYLE, GetWindowLong(Self.Handle,
GWL_EXSTYLE) or WS_EX_APPWINDOW);

Funguje to dobre - je-li okno zobrazeno, na taskbaru jsou dve ikony - jedna pro
hlavni
okno, druha pro ono nemodalni okno. No a ted z toho nemodalniho okna zavolam
modalni okno.

Pak se aplikace zacne chovat chybne - po kliknuti na ikonu nemodalniho okna v
taskbaru se nemodalni okno zobrazi a prekryje to modalni okno. Tohle je znamy
problem, nasel jsem ho popsany v archivu.

Nasel jsem pomerne jednoduche reseni - obslouzit Application.OnActivate a v nem
se
udela Screen.ActiveForm.SetFocus. On totiz Screen.ActiveForm kupodivu stale
ukazuje na ten modalni form, i kdyz na vrsku je disablovane nemodalni okno.

Tohle reseni funguje dobre na W2000 - modalni okno vzdy vypluje na povrch. Ale
na
WinXP to uz nefunguje - modalni okno stale zustava nekde vespod. Zjistil jsem
nasledujici:

1) Application.OnActivate je jedina udalost, o ktere se mi podarilo zjistit, ze
se pri
kliknuti na ikonu na taskbaru vyvola. Zadna jina udalost na okne zrejme
nenastava.

2) V Application.OnActivate se mi zaboha nepodarilo to modalni okno dostat
nahoru -
aby nebylo prekryto. Nepomohlo ani odeslani vlastni message pres PostMessage a
delani pokusu az tam.

3) Zduraznuji, ze W2000 neni problem, jen na XP.

4) Neuspel jsem ani s SetWindowPos, SetForegroundWindow ani s nicim jinym.

Nevite nekdo, co je to za zverstvo a pripadne co by s tim slo udelat?

Diky

David Lebeda